#ifndef __PRIORIZADOR_MATERIAS_H__
#define __PRIORIZADOR_MATERIAS_H__

#include "MatrizAdyacencia.h"
#include "ContextoDeEjecucion.h"

namespace modelo {
	
	class PriorizadorMaterias
	{
	public:
		PriorizadorMaterias(ContextoDeEjecucion* contexto);
		~PriorizadorMaterias(void);

		list<MateriaPriorizada*> PriorizarMaterias();

	protected:
		ContextoDeEjecucion* contexto;
		MatrizAdyacencia* matrizAdyacencia;

		virtual void ArmarArbolCorrelatividadesPara(string codigoMateria){}

		void ArmarArbolCorrelatividades();
		void ArmarArbolDeCorrelatividadesDePrimerNivelPara(string codigoMateria);
		void ArmarArbolDeCorrelatividadesCompletoPara(string codigoMateria);
		list<MateriaPriorizada*> CalcularPrioridadesMaterias(); 
		void CalcularRequisitosParaCadaMateria(list<MateriaPriorizada*>* materiasPriorizadas);
		void CalcularMateriasPosterioresParaCadaMateria(list<MateriaPriorizada*>* materiasPriorizadas);
	};
}
#endif